{ "cells": [ { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "# Non-Linear Programming\n", "\n", "## Try me\n", " [![Open In Colab](../../_static/colabs_badge.png)](https://colab.research.google.com/github/ffraile/operations-research-notebooks/blob/main/docs/source/NLP/tutorials/NLP%20Intro.ipynb)[![Binder](../../_static/binder_badge.png)](https://mybinder.org/v2/gh/ffraile/operations-research-notebooks/main?labpath=docs%2Fsource%2FNLP%2Ftutorials%2FNLP%20Intro.ipynb)\n", "\n", "## Introduction\n", "A non-linear programming (NLP) problem is similar to a linear programming problem in the sense that it is also composed of an objective function and constraints, but a NLP includes **at least** a non-linear function. In general, this chapter will deal with continuous decision variables and problems where either the objective function, or any of the constraints are not linear.\n", "NLP problems are in many cases more difficult to solve than linear programming problems. \n", "The mathematical foundations of NLP optimisation date back to the enlightenment era and the work of Joseph Louis Lagrange, a great mathematician and astronomer. \n", "He developed a method to take into account non-linear constraints into optimisation problems, which is called Lagrange multipliers, and that will be used in constrained NLP.\n", "In this introduction, we will use some Python code snippets to show why NLP are more difficult to solve. \n", "\n", "### Hard to distinguish local and global optimal values\n", "In linear programming, methods like the simplex need only to know the value of the unknowns and the value of the objective function to determine if the solution is optimal, because the maximum is always at a vertex of the feasibility region. \n", "Non-linear functions have **critical points** (we will provide a more formal definition of a critical point later on in the book), which can be either local or global maxima or minima:\n", "\n", "- **Local maximum**: The value of the function at the critical point is higher than the values of the function around the critical point.\n", "- **Global maximum**: The value of the function at the critical point is the highest value of the function. \n", "- **Local minimum**: The value of the function at the critical point is lower than the values of the function around the critical point.\n", "- **Global minimum**: The value of the function at the critical point is the lowest value of the function.\n", "\n", "Let us look at one example in Python." ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "pycharm": { "is_executing": false } }, "outputs": [ { "data": { "text/plain": "Text([-2.21212121], 212.0460765561599, 'Local max')" }, "metadata": {}, "output_type": "execute_result", "execution_count": 27 }, { "data": { "text/plain": "
", "image/png": "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\n" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "x = np.linspace(-3, 3, 100)\n", "y = (np.sin(x**3) - 5*np.sin(x**2) + 4*np.sin(x) + 12)**2 - 4\n", "plt.plot(x,y)\n", "\n", "\n", "\n", "plt.title('$f(x)=(\\sin(x^3) - 5\\sin(x^2) + 4\\sin(x) + 12)^2 -4$')\n", "\n", "# sets limits\n", "plt.xlim((-3,3))\n", "plt.xlabel(r'$x$')\n", "\n", "plt.ylim((0,459))\n", "plt.ylabel(r'$f(x)$')\n", "\n", "global_min = np.min(y)\n", "global_min_x = x[np.argmin(y)]\n", "\n", "global_max = np.max(y)\n", "global_max_x = x[np.argmax(y)]\n", "\n", "plt.annotate('Global min', (global_min_x, global_min))\n", "plt.annotate('Global max', (global_max_x, global_max))\n", "\n", "local_min = np.min(y[x > 1])\n", "local_min_x = x[y == local_min]\n", "\n", "\n", "plt.annotate('Local min', (local_min_x, local_min))\n", "local_max = np.max(y[x < -1])\n", "local_max_x = x[y==local_max]\n", "\n", "plt.annotate('Local max', (local_max_x, local_max))" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "is_executing": false } }, "source": [ "As it can be noted in the graph, the function has many critical points. Any critical point can be a local maximum or a global maximum depending on the range of values that x can take. For instance, if x could only take values in the range $x \\in [-3, 0]$, then the local maximum would become a global maximum. This makes it somewhat more difficult to find the optimal solution in an optimisation problem." ] }, { "cell_type": "markdown", "source": [ "### Optima not restricted to vertex\n", "With non-linear functions, the optimal (maximum or minimum) value might no longer be at one of the vertices. For instance, let us take us an example the function in the following Python script:" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 44, "outputs": [ { "data": { "text/plain": "
", "image/png": "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\n" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "x = np.arange(-1, 1, 0.01)\n", "y = np.arange(-1, 1, 0.01)\n", "xx, yy = np.meshgrid(x, y, sparse=True)\n", "z = (xx**2+ 1)**2+ (yy**2+ 1)**2+ (xx+yy+ 1)**2\n", "h = plt.contourf(x,y,z,levels=10)\n", "plt.plot(x,y+0.95,color='black')\n", "plt.plot(x,-y+0.5, color='black')\n", "plt.plot(x,y-0.95, color='black')\n", "plt.plot(x,-0.75*y-0.95, color='black')\n", "plt.xlim((-1,1))\n", "plt.ylim((-1,1))\n", "plt.ylabel('$y$')\n", "plt.xlabel('$x$')\n", "plt.title('$(x^2+ 1)^2+ (y^2+ 1)^2+ (x+y+ 1)^2$')\n", "plt.show()" ], "metadata": { "collapsed": false, "pycharm": { "is_executing": false } } }, { "cell_type": "markdown", "source": [ "The example shows a non-linear function on two decision variables, x and y. The black lines represent some constraints limiting the feasibility region. The contour graph shows that the maximum value of the objective function is within the interior of the feasibility region and not in one of the vertices. \n", "\n", "The following situations are examples where the optimal value might not be at one vertex of the feasibility region: \n", "\n", "- Multimodal function: As in the example above, the function might be **multimodal** and depend on several decision variables, increasing its complexity.\n", "- Interior optima: As in the example above, the optimal value might be found in an interior point of the feasibility region.\n", "- Discontinuous: The objective function might be discontinuous and again, the optimal value might not be surely located in one vertex.\n", "\n", "### Complex mathematical theory\n", "Given that the objective functions and the constraints can be of any family of functions, potentially, there is a huge body of mathematical theory that can be applied to NLP, since non-linear functions have a wide range of characteristics. Definitively, this makes NLP somewhat more difficult. The theoretical framework is more sophisticated, and modeling is also more difficult, since the researcher needs to define the types of function to use in the model.\n", "\n", "### Solver selection\n", "Due to the complex mathematical theory behind, selecting the right solver to solve a specific problem can be complex. In fact, different algorithms and solvers can provide different results.\n", "Normally, algorithms deal with local optimisation, rather than global optimisation, and for that reason, the selection of the initial point used to start the algorithm might have an impact in the solution.\n", "Hence, different algorithms might provide different solutions, but when a specific algorithm is selected, its configuration (particularly the initial point) might yield different results. \n", "\n", "## Types of problems\n", "In this chapter, NLP is divided into two different classes of problems with increasing complexity: \n", "\n", "- **Unconstrained NLP Problems** This class of NLP problems have no constraints, we look for a maximum or minimum of the objective function within some bounded decision variables, but not subject to any constraint.\n", "\n", "- **Constrained NLP Problems** This class of problems have constraints, i.e. there are restrictions to the objective function solution determined by a set of functions of the decision variables.\n", "\n", "Additionally, to better present the mathematical framework behind NLP, we will consider **One-Dimensional** unconstrained problems, where there is only one decision variable, and **Multi-Dimensional** or multi-modal, where there are several decision variables\n", "\n", "\n", "\n" ], "metadata": { "collapsed": false } } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.1" }, "pycharm": { "stem_cell": { "cell_type": "raw", "source": [], "metadata": { "collapsed": false } } } }, "nbformat": 4, "nbformat_minor": 1 }